package com.lefevre.cms.utils.threadLocal;

import com.lefevre.cms.bean.theme.ThemeRunObject;

import java.util.List;
import java.util.Map;

/**
 * 模板参数传递
 * map 参数 key:Run_Include_Instruction 引用代码;   key:LayoutFile 布局文件  value:List类型
 */
public class TemplateThreadLocal {

    public static ThreadLocal<ThemeRunObject> holder = new ThreadLocal<ThemeRunObject>();


    /**
     * 设置布局文件名称
     *
     * @param layoutFile 布局文件名称
     */
    public static void setLayoutFile(String layoutFile) {
        ThemeRunObject hr = holder.get();
        if (hr == null) {
            hr = new ThemeRunObject();
        }
        hr.addLayoutFile(layoutFile);
        holder.set(hr);
    }

    /**
     * 设置布局文件名称
     *
     * @param layoutFileList 布局文件名称集合
     */
    public static void setLayoutFile(List<String> layoutFileList) {
        ThemeRunObject hr = holder.get();
        if (hr == null) {
            hr = new ThemeRunObject();
        }
        hr.addAllLayoutFile(layoutFileList);
        holder.set(hr);
    }

    /**
     * 设置正在运行版块的引用代码
     *
     * @param referenceCode 正在运行版块的引用代码
     */
    public static void setReferenceCode(String referenceCode) {
        ThemeRunObject hr = holder.get();
        if (hr == null) {
            hr = new ThemeRunObject();
        }
        hr.setReferenceCode(referenceCode);
        holder.set(hr);
    }

    /**
     * 添加提交参数
     *
     * @param key   参数名
     * @param value 参数值
     */
    public static void addParameter(String key, Object value) {
        ThemeRunObject hr = holder.get();
        if (hr == null) {
            hr = new ThemeRunObject();
        }
        hr.addParameter(key, value);
        holder.set(hr);
    }

    /**
     * 获取提交参数
     *
     * @param key 参数名
     */
    public static Object getParameter(String key) {
        ThemeRunObject hr = holder.get();
        if (hr != null) {
            Map<String, Object> param = hr.getParameter();
            if (param != null && param.size() > 0) {
                return param.get(key);
            }
        }
        return null;
    }


    /**
     * 添加提交参数
     *
     * @param key   参数名
     * @param value 参数值
     */
    public static void addParameter(Map<String, Object> parameter) {
        ThemeRunObject hr = holder.get();
        if (hr == null) {
            hr = new ThemeRunObject();
        }
        hr.addParameter(parameter);
        holder.set(hr);
    }

    /**
     * 添加运行参数
     *
     * @param key   参数名
     * @param value 参数值
     */
    public static void addRuntimeParameter(String key, Object value) {
        ThemeRunObject hr = holder.get();
        if (hr == null) {
            hr = new ThemeRunObject();
        }
        hr.addRuntimeParameter(key, value);
        holder.set(hr);
    }

    /**
     * 获取运行参数
     *
     * @param key 参数名
     */
    public static Object getRuntimeParameter(String key) {
        ThemeRunObject hr = holder.get();
        if (hr != null) {
            Map<String, Object> param = hr.getRuntimeParameter();
            if (param != null && param.size() > 0) {
                return param.get(key);
            }
        }
        return null;
    }


    /**
     * 设置'更多'版块
     * @param more_forum '更多'版块

    public static void setMore_forum(Forum more_forum){
    TemplateRunObject hr = holder.get();
    if(hr == null){
    hr = new TemplateRunObject();
    }
    hr.setMore_forum(more_forum);
    holder.set(hr);
    } */
    /**
     * 设置参数
     *
     * @param 模板运行对象
     */
    public static void set(ThemeRunObject themeRunObject) {
        holder.set(themeRunObject);
    }

    public static ThemeRunObject get() {
        ThemeRunObject hr = holder.get();
        return hr;
    }

    /**
     * com.lefevre.cms.web.filter.TempletesInterceptor中删除
     */
    public static void removeThreadLocal() {
        //一定要清理，否则就是线程不安全的，因为服务器都是有线程池的。
        set(null);
        holder.remove();
    }
}
